package top.anydata.lifeofcode.lifesystem.service.sys.app.impl;

import org.modelmapper.ModelMapper;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;
import top.anydata.lifeofcode.lifesystem.dao.sys.app.ISysAppDetailRepository;
import top.anydata.lifeofcode.lifesystem.dto.sys.app.SysAppDetailDto;
import top.anydata.lifeofcode.lifesystem.entity.sys.app.SysAppDetailEntity;
import top.anydata.lifeofcode.lifesystem.service.sys.app.ISysAppAdminService;

/**
 * 功能描述:
 *
 * @author <a href="mailto:caingao@anydata.top">CainGao</a>
 * @version V_1.0
 * @date 2024/4/15 11:18 AM
 */
@Service
public class SysAppAdminServiceImpl implements ISysAppAdminService {

    ISysAppDetailRepository sysAppDetailRepository;

    public SysAppAdminServiceImpl(ISysAppDetailRepository sysAppDetailRepository) {
        this.sysAppDetailRepository = sysAppDetailRepository;
    }

    private final ModelMapper modelMapper = new ModelMapper();

    @Override
    public Page<SysAppDetailDto> listSysAppDetail(int page, int size) {
        Page<SysAppDetailEntity> sysAppDetailEntities =
                sysAppDetailRepository.findAll(PageRequest.of(page, size));
        return sysAppDetailEntities.map(sysAppDetailEntity ->
                modelMapper.map(sysAppDetailEntity, SysAppDetailDto.class)
        );
    }

    @Override
    public SysAppDetailDto getSysAppDetail(String appId) {
        return sysAppDetailRepository.findByAppId(appId)
                .map(sysAppDetailEntity -> modelMapper.map(sysAppDetailEntity, SysAppDetailDto.class))
                .orElse(null); // 或者抛出一个异常
    }

    @Override
    public void saveSysAppDetail(SysAppDetailDto sysAppDetailDto) {
        SysAppDetailEntity sysAppDetailEntity = modelMapper.map(sysAppDetailDto, SysAppDetailEntity.class);
        sysAppDetailRepository.save(sysAppDetailEntity);
    }

    @Override
    public void updateSysAppDetail(SysAppDetailDto sysAppDetailDto) {
        sysAppDetailRepository.findById(sysAppDetailDto.getId())
                .ifPresent(sysAppDetailEntity -> {
                    modelMapper.map(sysAppDetailDto, sysAppDetailEntity);
                    sysAppDetailRepository.save(sysAppDetailEntity);
                });
    }

    @Override
    public void deleteSysAppDetail(Integer id) {
        sysAppDetailRepository.findById(id)
                .ifPresent(sysAppDetailEntity -> {
                            sysAppDetailEntity.setIsDeleted(1);
                            sysAppDetailRepository.save(sysAppDetailEntity);
                        }
                );
    }


}
